package fr.auzaiphe.commun;

import java.io.File;
import java.util.ArrayList;

import javax.swing.filechooser.FileFilter;
/**
 *
 * @author Hugp
 *
 */
public class ExtendedFilter extends FileFilter
{
	   //Description et extensions acceptées par le filtre
	   private String description;
	   private ArrayList<String> extensions;
	   //Constructeur à partir de la description
	   public ExtendedFilter(String description){
	      if(description == null){
	         throw new NullPointerException("La description ne peut être null.");
	      }
	      this.description = description;
	      this.extensions = new ArrayList<String>();
	   }

	   public ExtendedFilter(String description, String extension){
		      if(description == null){
		         throw new NullPointerException("La description ne peut être null.");
		      }
		      this.description = description;
		      this.extensions = new ArrayList<String>();
		      this.extensions.add(extension);
		   }
	   //Implémentation de FileFilter
	   @Override
	public boolean accept(File file){
	      if(file.isDirectory() || this.extensions.size()==0) {
	         return true;
	      }
	      String nomFichier = file.getName().toLowerCase();
	      for(String extension : this.extensions){
	         if(nomFichier.endsWith(extension)){
	            return true;
	         }
	      }
	      return false;
	   }
	   @Override
	public String getDescription(){
	      StringBuffer buffer = new StringBuffer(this.description);
	      buffer.append(" (");
	      for(String extension : this.extensions){
	         buffer.append(extension).append(" ");
	      }
	      return buffer.append(")").toString();
	   }
	   //Quelques méthodes utilitaires
	   public void setDescription(String description){
	      if(description == null){
	         throw new NullPointerException("La description ne peut être null.");
	      }
	      this.description = description;
	   }
	   public void addExtension(String extension){
	      if(extension == null){
	         throw new NullPointerException("Une extension ne peut être null.");
	      }
	      this.extensions.add(extension);
	   }
	   public void removeExtension(String extension){
	      this.extensions.remove(extension);
	   }
	   public void clearExtensions(){
	      this.extensions.clear();
	   }
	   public ArrayList<String> getExtensions(){
	      return this.extensions;
	   }
	}
